﻿#ifndef WRWORKMAINWINDOW_H
#define WRWORKMAINWINDOW_H

#include <QObject>
#include <QMainWindow>
#include "WRWorkMainCommand.h"
#include "WRWorkMainGuiPart.h"
#include "Runtime/WRWorkGuiConfig.h"
#include "../WRSoft-Utility/WRObjRef.h"
#include "../WRSoft-Utility/Structs/WRArray.h"
#include "../WRSoft-Working-Common/WRWorkDaemon.h"

//声明工作主窗体。
class WRWorkMainWindow;

//表示工作主功能。
class WRWorkMainAction : public QObject
{
    Q_OBJECT

private:
    WRWorkMainActionEntry m_config;
    WRWorkMainWindow* m_window;
    void* m_target;
    QAction* m_menuItem;
    QAction* m_toolItem;

public:
    //初始化工作主行为。
    explicit WRWorkMainAction(WRWorkMainWindow* window, const WRWorkMainActionEntry& config);
    //释放当前对象所占用的相关资源。
    ~WRWorkMainAction(void);

    //获取图标。
    inline const QIcon& icon(void) const
    {
        return m_config.icon();
    }
    //获取名称。
    inline const QString& name(void) const
    {
        return m_config.name();
    }
    //获取标题。
    inline const QString& title(void) const
    {
        return m_config.title();
    }
    //获取描述。
    inline const QString& description(void) const
    {
        return m_config.description();
    }

    //执行初始化处理。
    void initialize(QMenu* menu);
    //执行初始化处理。
    void initialize(QToolBar* tool);

    //创建界面部件。
    WRWorkMainGuiPart* newGuiPart(void);

public slots:
    //触发处理事件。
    void trigger(void);
};
//表示工作主窗体。
class WRWorkMainWindow : public QMainWindow
{
    Q_OBJECT

    friend class WRWorkMainAction;

private:
    //行为集合。
    WRArray<WRWorkMainAction*> m_actions;

private slots:
    //当停靠可视性改变后调用此方法。
    void onDockVisibilityChanged(bool visible);

protected:
    //处理关闭事件。
    void closeEvent(QCloseEvent *);

public:
    //初始化工作主窗体。
    WRWorkMainWindow(const WRWorkGuiConfig& config, const WRObjRef<WRWorkDaemon>& daemon);
    //释放当前对象所占用的相关资源。
    ~WRWorkMainWindow(void);

    //获取推荐尺寸。
    QSize sizeHint() const;
};

#endif // WRWORKMAINWINDOW_H
